import { getToken, setToken, removeToken, setTimeStamp } from '@/utils/auth'
import { login, getUserProfile, getUserDetailById } from '@/api/user'
import { resetRouter } from '@/router'

const state = {
  // 持久化token
  token: getToken(),
  // 用户的基本资料
  userInfo: {}
}
const mutations = {
  setToken(state, payload) {
    state.token = payload // 更新token
    setToken(payload) // 同步更新到本地
  },
  removeToken(state) {
    state.token = null // 置空token
    removeToken() // 消除缓存token
  },
  setUserInfo(state, payload) { // 设置用户的资料
    state.userInfo = payload
  },
  removeUserInfo(state) {
    state.userInfo = {}
  }
}
const actions = { // 异步请求
  async login({ commit }, data) { // 登录
    const result = await login(data)
    commit('setToken', result)
    // 设置登录时间戳
    setTimeStamp()
  },
  async getUserInfo({ commit }) { // 获取用户的信息
    const result = await getUserProfile()
    const detailResult = await getUserDetailById(result.userId)
    commit('setUserInfo', { ...result, ...detailResult }) // 提交mutations
    return result // 八天之后要用,你好骚啊 在看门老大爷那儿
  },
  logout({ commit }) { // 登出action
    commit('removeToken')
    commit('removeUserInfo')

    resetRouter() // 重置路由
    commit('permission/setRoutes', [], { root: true })
    // 重置Vuex中的路由数据
    // { root: true } 第三对象参数表示commit为顶级调用方式,调用子模块
  }
}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}
